package com.zjj.algorithm.learning.atguigu.tree;

/**
 * 二叉树遍历，前序、中序和后序遍历、查找
 *
 * @author zjj_admin
 * @date 2022/11/21 20:37
 */
public class BinaryTreeDemo {
    public static void main(String[] args) {
        //创建一颗二叉树
        BinaryTree tree = new BinaryTree();


        /**
         *
         *创建如下的二叉树：
         *
         *          *                node1
         *          *           node2
         *          *        node3    node4
         *          *     node5           node7
         *          *        node8     node6
         *
         * 前序遍历：
         * TreeNode{no=1} -> TreeNode{no=2} -> TreeNode{no=3} -> TreeNode{no=5} -> TreeNode{no=8} -> TreeNode{no=4} -> TreeNode{no=7} -> TreeNode{no=6}
         *
         * 中序遍历：
         * TreeNode{no=5} -> TreeNode{no=8} -> TreeNode{no=3} -> TreeNode{no=2} -> TreeNode{no=4} -> TreeNode{no=6} -> TreeNode{no=7} -> TreeNode{no=1}
         *
         * 后续遍历：
         * TreeNode{no=8} -> TreeNode{no=5} -> TreeNode{no=3} -> TreeNode{no=6} -> TreeNode{no=7} -> TreeNode{no=4} -> TreeNode{no=2} -> TreeNode{no=1}
         *
         */
        //创建节点
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        TreeNode node8 = new TreeNode(8);

        //构建数节点
        node1.setLeft(node2);
        node2.setLeft(node3);
        node2.setRight(node4);
        node3.setLeft(node5);
        node4.setRight(node7);
        node5.setRight(node8);
        node7.setLeft(node6);
        //为二叉树添加根节点
        tree.setRoot(node1);


        //删除一个节点
        tree.delNode(7);


        System.out.println("前序遍历");
        tree.preOrder();
//
//        System.out.println();
//        System.out.println("中序遍历");
//        tree.midOrder();
//
//
//        System.out.println();
//        System.out.println("后续遍历");
//        tree.postOrder();


//        System.out.println("前序查找~");
//        TreeNode node51 = tree.preSearch(5);
//        System.out.println("node51 = " + node51);
//
//
//        System.out.println("中序查找~");
//        TreeNode node52 = tree.midSearch(5);
//        System.out.println("node52 = " + node52);
//
//        System.out.println("后序查找~");
//        TreeNode node53 = tree.postSearch(5);
//        System.out.println("node53 = " + node53);


    }
}





